// 对 axios 的二次封装，目的：使用请求与响应拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
// 引入用户相关仓库，需要用到token
// import useUserStore from '@/store/modules/user'
// 引入 router
import router from '@/router/index.js'

// nprogress 进度条
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
nprogress.configure({showSpinner: false}) // 去掉进度条加载的圈圈

// 第一步：新建一个 axios 实例（配置：基础路径，超时时间）
let request = axios.create({
    // 基础路径，使用开发环境中的变量
    baseURL: import.meta.env.VITE_APP_BASE_API, // 基础路径上会携带 /api
    // baseURL: '/api',
    // 超时时间
    timeout: 5000
})

// 第二步：request 实例添加请求拦截器
request.interceptors.request.use((config) => {
    // 进度条开始
    nprogress.start()
    const isLoginRequest = config.url.includes('/login'); // 请求的url栏是否包括url
    // 如果不包括那就需要携带token
    if(!isLoginRequest) {
        config.headers.Authorization = localStorage.getItem("TOKEN")
    }
    return config
})

// 第三部：request 实例添加响应拦截器
request.interceptors.response.use((response) => {
    // 进度条结束
    nprogress.done() 
    // token过期跳转至登录页
    if(response.data.code == 401){
        router.push('/login')
    }
    // 请求成功后的提醒
    // if(response.data.code == 1) {
    //     ElMessage({
    //             type: 'success',
    //             message: response.data.msg
    //         })
    // }else if (response.data.code == 0) {
    //     ElMessage({
    //             type: 'error',
    //             message: response.data.msg
    //         })
    // }
    return response.data
}, (error) => {
    return Promise.reject(error)
})

// 对外暴露
export default request